package com.crscd.jdbc.senior.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;

/**
 * Created with IntelliJ IDEA. JDBC工具类（v1.0） 1. 维护一个连接池对象 2. 对外提供在连接池中获取连接的方法 3. 对外提供回收连接的方法
 * 注意：工具类进对外提供功能性的功能代码，所以方法均为静态方法
 *
 * @description:
 * @author: liuziyang
 * @since: 10/23/25 9:51 AM
 * @modifiedBy:
 * @version: 1.0
 */
public final class JdbcUtil {
  /** 创建连接池引用，因为要提供给当前项目的全局使用，所以创建为静态的 */
  private static final DataSource DATA_SOURCE;

  // 在项目启动时，即启动连接池对象，赋值给dataSource
  static {
    // 1. 创建Properties集合，用于存储外部配置文件的key和value值
    Properties properties = new Properties();

    try {
      // 2. 读取外部配置文件，获取输入流，加载到Properties集合里
      final InputStream inputStream =
          JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
      properties.load(inputStream);
      // 3. 基于Properties集合构建DruidDataSource连接池
      DATA_SOURCE = DruidDataSourceFactory.createDataSource(properties);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * Get connection connection.
   *
   * @return the connection
   */
  public static Connection getConnection() {
      try {
          return DATA_SOURCE.getConnection();
      } catch (SQLException e) {
          throw new RuntimeException(e);
      }
  }

  /**
   * Release.
   *
   * @param connection the connection
   */
  public static void release(Connection connection) {
      try {
          connection.close();
      } catch (SQLException e) {
      throw new RuntimeException(e);
      }
  }
}
